/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package generatecertificate;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 *
 * @author Maciek
 */
public class GenerateCertificate {

    /**
     * @param args the command line arguments
     */
    
   
    public static String storepass = "bskbsk";
    private static String keystore = "evotingkeystore.jks";
    public static String keypass = storepass;
    
    private static String buildGenerateKeyCommand(String alias){
        StringBuilder sb = new StringBuilder();
        sb.append("cmd.exe /c start keytool -keyalg RSA -alias ").append(alias);// odpalając bez start
        // nie otworzy nam się okno i wtedy będzie miało sens przechwytywanie strumieni
        sb.append(" -genkey -storepass ").append(storepass);
        sb.append(" -keystore ").append(keystore);
        sb.append(" -keypass ").append(keypass);
        return sb.toString();
    }
    
    private static int generateKeyCommand(String alias) throws IOException, InterruptedException{
        String command = buildGenerateKeyCommand(alias);
       
        Process proc = Runtime.getRuntime().exec(command);
     //   getInput(proc); // wypisuje wszystko co otrzymam z odpowiedniego miejsca
        return proc.waitFor();
    }
    
    private static int exportKeyCommand(String alias, String certfilepath) throws IOException, InterruptedException{
        String command = buildExportKeyCommand(alias,certfilepath);
        Process proc = Runtime.getRuntime().exec(command);
       // getInput(proc); // wypisuje wszystko co otrzymam z odpowiedniego miejsca
        return proc.waitFor();
    }
    public static void getInput(Process proc) throws IOException{
         InputStream stdout = proc.getInputStream();
        String line;
        InputStream stderr = proc.getErrorStream();
          BufferedReader brCleanUp =
        new BufferedReader (new InputStreamReader (stdout));
        
          while ((line = brCleanUp.readLine ()) != null) {
            System.out.println ("[Stdout] " + line);
          }
          brCleanUp.close();

          // clean up if any output in stderr
          brCleanUp =
            new BufferedReader (new InputStreamReader (stderr));
          while ((line = brCleanUp.readLine ()) != null) {
            System.out.println ("[Stderr] " + line);
          }
          brCleanUp.close();
    }
    public static void main(String[] args) {
         try
        {            
            String alias = "macius";
            String certpthfile = alias + ".cer";
            int generateKeyCommand = generateKeyCommand(alias);
            if( generateKeyCommand == 0 ){
                System.out.println("Udało się to");
            }
            else{
                System.out.println("Nie udało się. Przerywam");
                return;
            }
            
            System.out.println("Teraz wygenereuje do pliku");
            
            int exportKeyCommand = exportKeyCommand(alias,certpthfile);
            
            if( exportKeyCommand == 0 ){
                System.out.println("Udało się wyeksporotwać do pliku");
            }
            else{
                System.out.println("Nie udało sie wykesportować do pliku exportKeyCommand = " + exportKeyCommand);
            }
        } catch (Throwable t)
          {
            t.printStackTrace();
          }
    }

    private static String buildExportKeyCommand(String alias, String certfilepath) {
        StringBuilder sb = new StringBuilder();
        sb.append("cmd.exe /c start keytool -export -alias ").append(alias); // odpalając bez start
        // nie otworzy nam się okno i wtedy będzie miało sens przechwytywanie strumieni
        sb.append(" -keystore ").append(keystore);
        sb.append(" -file ").append(certfilepath);
        sb.append(" -storepass ").append(storepass);
        // sb.append(" -rfc "); jeśli byśmy chcieli żeby to było później czytelne 
        return sb.toString();
    }
}
